package org.jeecg.extra.enums;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.jeecg.extra.model.TimeRange;

import java.util.Date;

/**
 * 时间范围枚举.
 *
 * <p>用于便捷返回一个时间范围
 *
 * @author chao.xie
 * @version 1.0.0
 * @创建日期: 2024.03.11
 */
@Getter
@AllArgsConstructor
public enum TimeRangeEnum {
    /** 今天 */
    TODAY("今天", 0, DateField.DAY_OF_YEAR),

    /** 昨天 */
    YESTERDAY("昨天", -1, DateField.DAY_OF_YEAR),

    /** 近一周 */
    WEEK("近一周", -6, DateField.DAY_OF_YEAR),

    /** 近一月 */
    MONTH("近一月", -1, DateField.MONTH),

    /** 近三月 */
    THREE_MONTH("近三月", -3, DateField.MONTH),

    /** 近一年 */
    YEAR("近一年", -1, DateField.YEAR),

    /** 自定义 */
    CUSTOM("自定义", null, null);

    private final String name;
    private final Integer value;
    private final DateField unit;

    public static TimeRange getRange(TimeRangeEnum value) {
        if (value == CUSTOM) {
            return null;
        }

        if (value == YESTERDAY) {
            return TimeRange.builder()
                    .start(DateUtil.beginOfDay(DateUtil.yesterday()))
                    .end(DateUtil.endOfDay(DateUtil.yesterday()))
                    .build();
        }

        Date startTime = DateUtil.offset(
                DateUtil.date(),
                value.getUnit(),
                value.getValue()
        );
        return TimeRange.builder()
                .start(DateUtil.beginOfDay(startTime))
                .end(DateUtil.endOfDay(DateUtil.date()))
                .build();
    }
}
